Developing software can be difficult, especially when coordinating many software development tasks within a group or between groups of developers. Typically, different developers spend their time planning, writing or revising different parts of the software project. Some developers may be tracking down bugs, others are fixing the bugs, and still others may be adding new features to the software. Communication between developers and groups is critical to coordinate efforts because no single developer can possibly know every detail about the project.
During the development process, a developer often wishes to become familiar with the history of a piece of code. Knowing how the code fits in with the rest of the project can help determine how the developer proceeds when modifying the code. So, for example, the developer might want to know who on the development team is most familiar with the code.
However, determining which of the developers to contact is not always easy. For example, the code may have been modified by a variety of developers for a variety of reasons. The developer might consult a number of sources, such as emails, the source code store, and a bug tracking database. However, it may be difficult or impossible to find an answer via these resources because of the time required to sift through them.
On a large project, one of the developers may take up the role of project historian. The historian can be a valuable resource who can recount which developers worked on what code and can identify the developers who are most likely to be familiar with a particular issue or piece of code. However, even the historian cannot possibly know the entire history of the software project and may eventually leave the development team to pursue other projects. Further, if the software team is separated geographically, it may be impossible to consult the historian in a face-to-face conversation.